home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / ddj0897.zip / DYN401.ZIP / class / linklist.c < prev    next >
C/C++ Source or Header  |  1997-04-16  |  9KB  |  336 lines

  1.  
  2.  
  3. /*  Copyright (c) 1993-1996 Algorithms Corporation  */
  4. /*  All rights reserved.  */
  5.  
  6.  
  7.  
  8.  
  9. /*  This file automatically generated by dpp - do not edit  */
  10.  
  11. #define    DPP_STRATEGY    2
  12. #define    DPP_FASTWIDE    0
  13.  
  14.  
  15.  
  16.  
  17. #define    CLASS    LinkList_c
  18. #define    ivType    LinkList_iv_t
  19.  
  20. #include "generics.h"
  21.  
  22. object    LinkList_c;
  23.  
  24.  
  25. #line 26 "linklist.c"
  26. typedef struct  _LinkList_iv_t  {
  27.     int iNelm;
  28.     CRITICALSECTION iCS;
  29. }    LinkList_iv_t;
  30.  
  31.  
  32. #line 22 "linklist.d"
  33. #define FIRST gNext 
  34. #define LAST gPrevious 
  35.  
  36. cmeth objrtn LinkList_cm_gNew(object self)
  37.     object obj = oSuper(LinkList_c, gNew, self)(self); 
  38.     accessIVsOf(obj); 
  39.     INITIALIZECRITICALSECTION(iv->iCS); 
  40.     gInitLink(obj, obj, obj, obj); 
  41.     return obj; 
  42.  
  43. imeth objrtn LinkList_im_gIncNelm(object self, int inc)
  44. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  45.     if (0 > (iv->iNelm += inc)) 
  46.         iv->iNelm = 0; 
  47.     return self; 
  48.  
  49. imeth int LinkList_im_gSize(object self)
  50. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  51.     return iv->iNelm; 
  52.  
  53. imeth objrtn LinkList_im_gFirst(object self)
  54. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  55.     object r; 
  56.     ENTERCRITICALSECTION(iv->iCS); 
  57.     r = FIRST(self); 
  58.     LEAVECRITICALSECTION(iv->iCS); 
  59.     return r; 
  60.  
  61. imeth objrtn LinkList_im_gLast(object self)
  62. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  63.     object r; 
  64.     ENTERCRITICALSECTION(iv->iCS); 
  65.     r = LAST(self); 
  66.     LEAVECRITICALSECTION(iv->iCS); 
  67.     return r; 
  68.  
  69. imeth objrtn LinkList_im_gAddFirst(object self, object lnk)
  70. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  71.     ChkArg(lnk, 2); 
  72.     ENTERCRITICALSECTION(iv->iCS); 
  73.     gAddAfter(self, lnk); 
  74.     LEAVECRITICALSECTION(iv->iCS); 
  75.     return self; 
  76.  
  77. imeth objrtn LinkList_im_gAddLast(object self, object lnk)
  78. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  79.     ChkArg(lnk, 2); 
  80.     ENTERCRITICALSECTION(iv->iCS); 
  81.     gAddBefore(self, lnk); 
  82.     LEAVECRITICALSECTION(iv->iCS); 
  83.     return self; 
  84.  
  85. imeth objrtn LinkList_im_gInsertObjAt(object self, object lnk, int idx)
  86. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  87.     ChkArg(lnk, 2); 
  88.     ENTERCRITICALSECTION(iv->iCS); 
  89.     if (!idx || idx < -iv->iNelm) 
  90.         gAddAfter(self, lnk); 
  91.     else if (idx == -1 || idx >= iv->iNelm) 
  92.         gAddBefore(self, lnk); 
  93.     else if (idx > 0) 
  94.         gAddAfter(gNth(self, idx), lnk); 
  95.     else 
  96.         gAddBefore(gNth(self, idx+1), lnk); 
  97.     LEAVECRITICALSECTION(iv->iCS); 
  98.     return self; 
  99.  
  100. imeth objrtn LinkList_im_gDisposeFirst(object self)
  101. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  102.     ENTERCRITICALSECTION(iv->iCS); 
  103.     if (iv->iNelm) 
  104.         gDispose(FIRST(self)); 
  105.     LEAVECRITICALSECTION(iv->iCS); 
  106.     return self; 
  107.  
  108. imeth objrtn LinkList_im_gDeepDisposeFirst(object self)
  109. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  110.     ENTERCRITICALSECTION(iv->iCS); 
  111.     if (iv->iNelm) 
  112.         gDeepDispose(FIRST(self)); 
  113.     LEAVECRITICALSECTION(iv->iCS); 
  114.     return self; 
  115.  
  116. imeth objrtn LinkList_im_gRemoveFirst(object self)
  117. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  118.     object r; 
  119.     ENTERCRITICALSECTION(iv->iCS); 
  120.     r = iv->iNelm ? gRemove(FIRST(self)) : NULLOBJ; 
  121.     LEAVECRITICALSECTION(iv->iCS); 
  122.     return r; 
  123.  
  124. imeth objrtn LinkList_im_gDisposeLast(object self)
  125. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  126.     ENTERCRITICALSECTION(iv->iCS); 
  127.     if (iv->iNelm) 
  128.         gDispose(LAST(self)); 
  129.     LEAVECRITICALSECTION(iv->iCS); 
  130.     return self; 
  131.  
  132. imeth objrtn LinkList_im_gDeepDisposeLast(object self)
  133. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  134.     ENTERCRITICALSECTION(iv->iCS); 
  135.     if (iv->iNelm) 
  136.         gDeepDispose(LAST(self)); 
  137.     LEAVECRITICALSECTION(iv->iCS); 
  138.     return self; 
  139.  
  140. imeth objrtn LinkList_im_gRemoveLast(object self)
  141. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  142.     object r; 
  143.     ENTERCRITICALSECTION(iv->iCS); 
  144.     if (iv->iNelm) 
  145.         r = gRemove(LAST(self)); 
  146.     else 
  147.         r = NULL; 
  148.     LEAVECRITICALSECTION(iv->iCS); 
  149.     return r; 
  150.  
  151. imeth objrtn LinkList_im_gDisposeAllNodes(object self)
  152. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  153.     object obj; 
  154.  
  155.     ENTERCRITICALSECTION(iv->iCS); 
  156.     while (obj = FIRST(self)) 
  157.         gDispose(obj); 
  158.     LEAVECRITICALSECTION(iv->iCS); 
  159.     return self; 
  160.  
  161. imeth objrtn LinkList_im_gDeepDisposeAllNodes(object self)
  162. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  163.     object obj; 
  164.  
  165.     ENTERCRITICALSECTION(iv->iCS); 
  166.     while (obj = FIRST(self)) 
  167.         gDeepDispose(obj); 
  168.     LEAVECRITICALSECTION(iv->iCS); 
  169.     return self; 
  170.  
  171. imeth objrtn LinkList_im_gDispose(object self)
  172. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  173.     gDisposeAllNodes(self); 
  174.     DELETECRITICALSECTION(iv->iCS); 
  175.     return oSuper(LinkList_c, gDispose, self)(self); 
  176.  
  177. imeth objrtn LinkList_im_gDeepDispose(object self)
  178. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  179.     gDeepDisposeAllNodes(self); 
  180.     DELETECRITICALSECTION(iv->iCS); 
  181.     return oSuper(LinkList_c, gDeepDispose, self)(self); 
  182.  
  183. imeth objrtn LinkList_im_gSequence(object self)
  184.     return gNewWithObj(LinkSequence, FIRST(self)); 
  185.  
  186. imeth objrtn LinkList_im_gCopy(object self)
  187. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  188.     object nobj; 
  189.     ivType *iv2; 
  190.     object lnk; 
  191.  
  192.     ENTERCRITICALSECTION(iv->iCS); 
  193.     nobj = oSuper(LinkList_c, gCopy, self)(self); 
  194.     iv2 = ivPtr(nobj); 
  195.     iv2->iNelm = 0; 
  196.     gInitLink(nobj, nobj, nobj, nobj); 
  197.     for (lnk=FIRST(self) ; lnk ; lnk = gNext(lnk)) 
  198.         gAddBefore(nobj, gCopy(lnk)); 
  199.     LEAVECRITICALSECTION(iv->iCS); 
  200.     return nobj; 
  201.  
  202. imeth objrtn LinkList_im_gDeepCopy(object self)
  203. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  204.     object nobj; 
  205.     ivType *iv2; 
  206.     object lnk; 
  207.  
  208.     ENTERCRITICALSECTION(iv->iCS); 
  209.     nobj = oSuper(LinkList_c, gDeepCopy, self)(self); 
  210.     iv2 = ivPtr(nobj); 
  211.     iv2->iNelm = 0; 
  212.     gInitLink(nobj, nobj, nobj, nobj); 
  213.     for (lnk=FIRST(self) ; lnk ; lnk = gNext(lnk)) 
  214.         gAddBefore(nobj, gDeepCopy(lnk)); 
  215.     LEAVECRITICALSECTION(iv->iCS); 
  216.     return nobj; 
  217.  
  218. imeth objrtn LinkList_im_gStringRep(object self)
  219. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  220.     object lnk, s, t; 
  221.  
  222.     ENTERCRITICALSECTION(iv->iCS); 
  223.     s = oSuper(LinkList_c, gStringRepValue, self)(self); 
  224.     gAppend(s, (object) "  ("); 
  225.     for (lnk = FIRST(self) ; lnk ; ) { 
  226.         t = gStringRepValue(lnk); 
  227.         if (lnk = gNext(lnk)) 
  228.             vBuild(s, NULL, t, ", ", NULL); 
  229.         else 
  230.             gAppend(s, t); 
  231.         gDispose(t); 
  232.     } 
  233.     gAppend(s, (object) ")\n"); 
  234.     LEAVECRITICALSECTION(iv->iCS); 
  235.     return s; 
  236.  
  237. imeth objrtn LinkList_im_gEnterCriticalSection(object self)
  238. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  239.     ENTERCRITICALSECTION(iv->iCS); 
  240.     return self; 
  241.  
  242. imeth objrtn LinkList_im_gLeaveCriticalSection(object self)
  243. { LinkList_iv_t *iv = GetIVs(LinkList, self);
  244.     LEAVECRITICALSECTION(iv->iCS); 
  245.     return self; 
  246.  
  247.  
  248. #line 275 "linklist.c"
  249.  
  250. objrtn    LinkList_initialize(void)
  251. {
  252.     static  CRITICALSECTION  cs;
  253.     static  int volatile once = 0;
  254.  
  255.     ENTERCRITICALSECTION(_CI_CS_);
  256.     if (!once) {
  257.         INITIALIZECRITICALSECTION(cs);
  258.         once = 1;
  259.     }
  260.     LEAVECRITICALSECTION(_CI_CS_);
  261.  
  262.     ENTERCRITICALSECTION(cs);
  263.  
  264.     if (LinkList_c) {
  265.         LEAVECRITICALSECTION(cs);
  266.         return LinkList_c;
  267.     }
  268.     INHIBIT_THREADER;
  269.     Link_initialize();
  270.     if (LinkList_c)  {
  271.         ENABLE_THREADER;
  272.         LEAVECRITICALSECTION(cs);
  273.         return LinkList_c;
  274.     }
  275.     LinkList_c = gNewClass(Class, "LinkList", sizeof(LinkList_iv_t), 0, Link, END);
  276.     cMethodFor(LinkList, gNew, LinkList_cm_gNew);
  277.     iMethodFor(LinkList, gRemoveFirst, LinkList_im_gRemoveFirst);
  278.     iMethodFor(LinkList, gAddFirst, LinkList_im_gAddFirst);
  279.     iMethodFor(LinkList, gInsertObjAt, LinkList_im_gInsertObjAt);
  280.     iMethodFor(LinkList, gDisposeAllNodes, LinkList_im_gDisposeAllNodes);
  281.     iMethodFor(LinkList, gSize, LinkList_im_gSize);
  282.     iMethodFor(LinkList, gDisposeFirst, LinkList_im_gDisposeFirst);
  283.     iMethodFor(LinkList, gDeepDisposeAllNodes, LinkList_im_gDeepDisposeAllNodes);
  284.     iMethodFor(LinkList, gEnterCriticalSection, LinkList_im_gEnterCriticalSection);
  285.     iMethodFor(LinkList, gDeepDisposeFirst, LinkList_im_gDeepDisposeFirst);
  286.     iMethodFor(LinkList, gFirst, LinkList_im_gFirst);
  287.     iMethodFor(LinkList, gDispose, LinkList_im_gDispose);
  288.     iMethodFor(LinkList, gLast, LinkList_im_gLast);
  289.     iMethodFor(LinkList, gDeepDisposeLast, LinkList_im_gDeepDisposeLast);
  290.     iMethodFor(LinkList, gSequence, LinkList_im_gSequence);
  291.     iMethodFor(LinkList, gCopy, LinkList_im_gCopy);
  292.     iMethodFor(LinkList, gRemoveLast, LinkList_im_gRemoveLast);
  293.     iMethodFor(LinkList, gDeepDispose, LinkList_im_gDeepDispose);
  294.     iMethodFor(LinkList, gLeaveCriticalSection, LinkList_im_gLeaveCriticalSection);
  295.     iMethodFor(LinkList, gDisposeLast, LinkList_im_gDisposeLast);
  296.     iMethodFor(LinkList, gStringRep, LinkList_im_gStringRep);
  297.     iMethodFor(LinkList, gIncNelm, LinkList_im_gIncNelm);
  298.     iMethodFor(LinkList, gAddLast, LinkList_im_gAddLast);
  299.     iMethodFor(LinkList, gDeepCopy, LinkList_im_gDeepCopy);
  300.  
  301.     ENABLE_THREADER;
  302.  
  303.     LEAVECRITICALSECTION(cs);
  304.  
  305.     return LinkList_c;
  306. }
  307.  
  308.  
  309.  
  310.